home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1985-05-28 | 18.3 KB | 599 lines |
- 10000 REM **************************************************************
- 10010 REM ** THE DESIGNER V1.0 **
- 10020 REM ** Copyright 1983, by Jan B. Young **
- 10030 REM **************************************************************
- 10040 KEY OFF:ON ERROR GOTO 14930:CAPS=1:PURGE=0
- 10050 OPEN "A:DESIGNER.DRV" FOR INPUT AS #1
- 10060 INPUT #1,DRIVE$
- 10070 CLOSE #1
- 10080 KEY(1) ON:ON KEY(1) GOSUB 10440
- 10090 KEY(2) ON:ON KEY(2) GOSUB 10450
- 10100 KEY(3) ON:ON KEY(3) GOSUB 10460
- 10110 KEY(4) ON:ON KEY(4) GOSUB 10470
- 10120 KEY(5) ON:ON KEY(5) GOSUB 10480
- 10130 KEY(6) ON:ON KEY(6) GOSUB 10490
- 10140 KEY(7) ON:ON KEY(7) GOSUB 10500
- 10150 KEY(8) ON:ON KEY(8) GOSUB 10510
- 10160 KEY(9) ON:ON KEY(9) GOSUB 10520
- 10170 KEY(10) ON:ON KEY(10) GOSUB 10530
- 10180 REM **************************************************************
- 10190 REM ** Mainline **
- 10200 REM **************************************************************
- 10210 SKIP$ = "INS":NOW$="INS"
- 10220 REC=1:GOSUB 15490
- 10230 IF SKIP$="INS" THEN GOSUB 10540
- 10240 IF SKIP$="NEW" THEN GOSUB 11000
- 10250 IF SKIP$="TXT" THEN GOSUB 12170
- 10260 IF SKIP$="SCL" THEN GOSUB 12680
- 10270 IF SKIP$="SSP" THEN GOSUB 13470
- 10280 IF SKIP$="RSP" THEN GOSUB 14330
- 10290 IF SKIP$="ANI" THEN GOSUB 13870
- 10300 IF SKIP$="RSC" THEN GOSUB 14610
- 10310 IF SKIP$="SSC" THEN GOSUB 14740
- 10320 IF SKIP$ <> "" GOTO 10230
- 10330 SCREEN 0,0,0:WIDTH 80:END
- 10340 REC=5:GOSUB 15490
- 10350 GOSUB 15220:IF TYPE$<>"C" THEN GOTO 10350
- 10360 IF X$ < "A" OR X$ > "D" THEN GOTO 10350
- 10370 OPEN "A:DESIGNER.DRV" FOR OUTPUT AS #1
- 10380 WRITE #1, X$:CLOSE #1:DRIVE$=X$:GOTO 10080
- 10390 REC=19:GOSUB 15490:GOSUB 15220:SCREEN 0,0,0:END ' no color/graph card
- 10400 REC=24:GOSUB 15490:GOSUB 15220:SCREEN 0,0,0:END ' no printer
- 10410 REM *************************************************************
- 10420 REM ** Key Settings **
- 10430 REM *************************************************************
- 10440 SKIP$ = "NEW":RETURN
- 10450 SKIP$ = "SCL":RETURN
- 10460 SKIP$ = "SSP":RETURN
- 10470 SKIP$ = "SSC":RETURN
- 10480 SKIP$ = "RSP":RETURN
- 10490 SKIP$ = "RSC":RETURN
- 10500 SKIP$ = "TXT":RETURN
- 10510 SKIP$ = "ANI":RETURN
- 10520 SKIP$ = "INS":RETURN
- 10530 SKIP$ = "":RETURN
- 10540 REM *************************************************************
- 10550 REM ** F9 INS = Instructions / Command List **
- 10560 REM *************************************************************
- 10570 NOW$="INS"
- 10580 REC=28:GOSUB 15490
- 10590 LOCATE 21,10:PRINT DRIVE$+"."
- 10600 GOSUB 15220:IF SKIP$<>"INS" THEN RETURN
- 10610 IF ASC(X$) = 8 THEN GOTO 10600
- 10620 IF TYPE$ <> "C" THEN GOTO 10600
- 10630 LOCATE 8,62:PRINT USING "\ \";" "+X$:Y$=X$
- 10640 GOSUB 15220:IF SKIP$<>"INS" THEN RETURN
- 10650 IF TYPE$ <> "C" THEN GOTO 10640
- 10660 IF ASC(X$) <> 8 THEN GOTO 10690
- 10670 LOCATE 8,62:PRINT USING "\ \";" "
- 10680 GOTO 10600
- 10690 LOCATE 8,73:PRINT X$:Y$=Y$+X$
- 10700 GOSUB 15220:IF SKIP$<>"INS" THEN RETURN
- 10710 IF TYPE$ <> "C" THEN GOTO 10700
- 10720 IF ASC(X$) <> 8 THEN GOTO 10750
- 10730 LOCATE 8,73:PRINT " "
- 10740 GOTO 10640
- 10750 LOCATE 8,74:PRINT X$:X$=Y$+X$
- 10760 REC=0
- 10770 IF X$="INS" THEN GOTO 10580
- 10780 IF X$="GEN" THEN REC = 46
- 10790 IF X$="NEW" THEN REC = 140
- 10800 IF X$="SCL" THEN REC = 189
- 10810 IF X$="RSP" THEN REC = 271
- 10820 IF X$="SSP" THEN REC = 301
- 10830 IF X$="RSC" THEN REC = 328
- 10840 IF X$="SSC" THEN REC = 352
- 10850 IF X$="ANI" THEN REC = 363
- 10860 IF X$="TXT" THEN REC = 389
- 10870 IF X$="CRD" THEN REC = 435
- 10880 IF X$="DRV" THEN GOTO 10920
- 10890 IF REC <> 0 THEN GOTO 10910
- 10900 LOCATE 8,62:PRINT "Try Again: ":GOTO 10600
- 10910 GOSUB 15490:RETURN
- 10920 OPEN "A:DESIGNER.DRV" FOR OUTPUT AS #1
- 10930 IF DRIVE$="A" THEN GOTO 10980
- 10940 IF DRIVE$="D" THEN DRIVE$="A"
- 10950 IF DRIVE$="C" THEN DRIVE$="D"
- 10960 IF DRIVE$="B" THEN DRIVE$="C"
- 10970 GOTO 10990
- 10980 DRIVE$="B"
- 10990 WRITE #1,DRIVE$:CLOSE #1:RETURN
- 11000 REM *************************************************************
- 11010 REM ** F1 NEW = New Figure or Screen **
- 11020 REM *************************************************************
- 11030 NOW$="NEW":REC=471:GOSUB 15490
- 11040 GOSUB 15220:IF SKIP$<>"NEW" THEN RETURN
- 11050 IF TYPE$<>"C" THEN 11040
- 11060 IF X$="H" THEN GOTO 11090
- 11070 IF X$="M" THEN GOTO 11100
- 11080 GOTO 11040
- 11090 RES1=2:BAK=0:GOTO 11230
- 11100 REC = 474:RES1=1
- 11110 GOSUB 15490
- 11120 GOSUB 15220:IF SKIP$<>"NEW" THEN RETURN
- 11130 IF X$="1" THEN GOTO 11160
- 11140 IF X$="0" THEN GOTO 11170
- 11150 GOTO 11120
- 11160 REC=478:PAL=1:GOTO 11180
- 11170 REC=489:PAL=0
- 11180 GOSUB 15490
- 11190 GOSUB 15220:IF SKIP$<>"NEW" THEN RETURN
- 11200 IF TYPE$<>"C" THEN 11190
- 11210 BAK=ASC(X$)-65
- 11220 IF BAK<0 OR BAK >15 THEN GOTO 11190
- 11230 RES=RES1:CLS:CLR=1:GRID=0:SCREEN RES:LAST=0
- 11240 IF RES=1 THEN COLOR BAK,PAL
- 11250 REM ********* intermediate entry point ***********
- 11260 HLOC=160*RES:VLOC=100
- 11270 PSET(HLOC,VLOC)
- 11280 IF LAST=1 THEN PRESET(HLOC,VLOC+1),CLR
- 11290 IF LAST=2 THEN PRESET(HLOC-1,VLOC),CLR
- 11300 IF LAST=3 THEN PRESET(HLOC,VLOC-1),CLR
- 11310 IF LAST=4 THEN PRESET(HLOC+1,VLOC),CLR
- 11320 PURGE=1:GOSUB 15220:IF SKIP$<>"NEW" THEN RETURN
- 11330 IF TYPE$="G" THEN GOTO 11530
- 11340 IF X$ = "G" THEN GOTO 11380
- 11350 IF X$>="A" AND X$ <="Z" THEN HOLD$=X$
- 11360 IF X$=>"0" AND X$ <="9" THEN GOTO 11580
- 11370 GOTO 11320
- 11380 IF GRID=1 THEN GOTO 11460
- 11390 FOR I = 9 TO 200 STEP 10
- 11400 LINE (0,I)-(4*RES,I),1:LINE (315*RES,I)-(320*RES,I),1
- 11410 NEXT I
- 11420 FOR I = 9 TO 320*RES STEP 10
- 11430 LINE (I,0)-(I,4),1:LINE (I,195)-(I,200),1
- 11440 NEXT I
- 11450 GRID=1:GOTO 11320
- 11460 FOR I = 9 TO 200 STEP 10
- 11470 LINE (0,I)-(4*RES,I),0:LINE (315*RES,I)-(320*RES,I),0
- 11480 NEXT I
- 11490 FOR I = 9 TO 320*RES STEP 10
- 11500 LINE (I,0)-(I,4),0:LINE (I,195)-(I,200),0
- 11510 NEXT I
- 11520 GRID=0:GOTO 11320
- 11530 IF X$="H" THEN GOTO 12140
- 11540 IF X$="M" THEN GOTO 12120
- 11550 IF X$="P" THEN GOTO 12100
- 11560 IF X$="K" THEN GOTO 12080
- 11570 GOTO 11320
- 11580 IF HOLD$ <>"P" THEN GOTO 11630
- 11590 IF X$<"0" OR X$>"3" OR (RES=2 AND X$>"1") THEN GOTO 11630
- 11600 PRESET (HLOC,VLOC)
- 11610 PAINT (HLOC,VLOC),(ASC(X$)-48),CLR
- 11620 PRESET (HLOC,VLOC),CLR
- 11630 IF HOLD$="F" AND X$="0" THEN CLR=0
- 11640 IF HOLD$="F" AND X$="1" THEN CLR=1
- 11650 IF HOLD$="F" AND X$="2" THEN CLR=2
- 11660 IF HOLD$="F" AND X$="3" THEN CLR=3
- 11670 IF HOLD$="F" THEN HOLD$=""
- 11680 IF HOLD$<>"D" OR X$ <> "1" THEN GOTO 11710
- 11690 VSET=VLOC:HSET=HLOC:HOLD$=""
- 11700 GOTO 11320
- 11710 IF HOLD$<>"D" OR X$ <> "2" THEN GOTO 11740
- 11720 LINE (HSET,VSET)-(HLOC,VLOC),CLR:HOLD$=""
- 11730 GOTO 11320
- 11740 IF HOLD$<>"C" OR X$<> "1" THEN GOTO 11770
- 11750 VSET=VLOC:HSET=HLOC:HOLD$=""
- 11760 GOTO 11320
- 11770 IF HOLD$<>"C" OR X$<> "2" THEN GOTO 11830
- 11780 IF RES=2 THEN RAD=SQR(5.7*(VSET-VLOC)^2+(HSET-HLOC)^2)
- 11790 IF RES=1 THEN RAD=SQR(1.45*(VSET-VLOC)^2+(HSET-HLOC)^2)
- 11800 CIRCLE (HSET,VSET),RAD,CLR
- 11810 HOLD$=""
- 11820 GOTO 11320
- 11830 IF HOLD$<>"A" OR X$<> "1" THEN GOTO 11860
- 11840 VSET=VLOC:HSET=HLOC:HOLD$=""
- 11850 GOTO 11320
- 11860 IF HOLD$<>"A" OR X$<>"2" THEN GOTO 11890
- 11870 VSET2=VLOC:HSET2=HLOC:HOLD$=""
- 11880 GOTO 11320
- 11890 IF HOLD$<>"A" OR X$<>"3" THEN GOTO 11320
- 11900 IF RES=2 THEN GOTO 11990
- 11910 RAD=SQR(1.4*(VSET-VSET2)^2+(HSET-HSET2)^2)
- 11920 ANG1=ATN(1.25*(VSET-VSET2)/(HSET2-HSET))
- 11930 ANG2=ATN(1.25*(VSET-VLOC)/(HLOC-HSET))
- 11940 IF HSET>HLOC THEN ANG2=3.14+ANG2
- 11950 IF HLOC>HSET AND VLOC>VSET THEN ANG2=6.28+ANG2
- 11960 IF HSET>HSET2 THEN ANG1=3.14+ANG1
- 11970 IF HSET2>HSET AND VSET2>VSET THEN ANG1=6.28+ANG1
- 11980 GOTO 12060
- 11990 RAD=SQR(5.7*(VSET-VSET2)^2+(HSET-HSET2)^2)
- 12000 ANG1=ATN(2.5*(VSET-VSET2)/(HSET2-HSET))
- 12010 ANG2=ATN(2.5*(VSET-VLOC)/(HLOC-HSET))
- 12020 IF HSET>HLOC THEN ANG2=3.14+ANG2
- 12030 IF HLOC>HSET AND VLOC>VSET THEN ANG2=6.28+ANG2
- 12040 IF HSET>HSET2 THEN ANG1=3.14+ANG1
- 12050 IF HSET2>HSET AND VSET2>VSET THEN ANG1=6.28+ANG1
- 12060 CIRCLE (HSET,VSET),RAD,CLR,ANG1,ANG2
- 12070 HOLD$="":GOTO 11320
- 12080 IF HLOC > 0 THEN HLOC=HLOC-1
- 12090 LAST=4:GOTO 11270
- 12100 IF VLOC < 199 THEN VLOC=VLOC+1
- 12110 LAST=3:GOTO 11270
- 12120 IF HLOC < RES*320-1 THEN HLOC=HLOC+1
- 12130 LAST=2:GOTO 11270
- 12140 IF VLOC > 0 THEN VLOC=VLOC-1
- 12150 LAST=1:GOTO 11270
- 12160 RETURN
- 12170 REM *************************************************************
- 12180 REM ** F7 TXT = Add Text Characters **
- 12190 REM *************************************************************
- 12200 IF RES <> 0 THEN GOTO 12220
- 12210 NOW$="TXT":REC=500:GOSUB 15490:GOSUB 15220:RETURN
- 12220 NOW$="TXT":CAPS=0:START=1:MSG=0:GOSUB 15920
- 12230 PRESET (HLOC,VLOC),CLR
- 12240 OPEN "A:TEXTCHAR" AS #1 LEN=12:GOTO 12250
- 12250 FIELD #1,12 AS BUFFER$
- 12260 DIM HOLDC(2),HOLDB(2*(3-RES))
- 12270 PURGE=1:GOSUB 15220:IF SKIP$="NEW" THEN GOTO 12650
- 12280 IF SKIP$ <> "TXT" THEN GOTO 12640
- 12290 IF TYPE$="C" AND ASC(X$) > 31 AND ASC(X$) < 126 THEN GOTO 12500
- 12300 IF TYPE$ = "C" THEN GOTO 12270
- 12310 IF X$ <>"H" AND X$ <>"M" AND X$<>"P" AND X$<>"K" THEN GOTO 12270
- 12320 IF START=1 THEN GOTO 12270
- 12330 PUT (HLOC,VLOC),HOLDB,PSET
- 12340 IF X$="H" THEN GOTO 12390
- 12350 IF X$="M" THEN GOTO 12410
- 12360 IF X$="P" THEN GOTO 12430
- 12370 IF X$="K" THEN GOTO 12450
- 12380 GOTO 12270
- 12390 IF VLOC > 0 THEN VLOC=VLOC-1
- 12400 GOTO 12470
- 12410 IF HLOC < RES*320-7 THEN HLOC=HLOC+1
- 12420 GOTO 12470
- 12430 IF VLOC < 192 THEN VLOC=VLOC+1
- 12440 GOTO 12470
- 12450 IF HLOC > 0 THEN HLOC=HLOC-1
- 12460 GOTO 12470
- 12470 GET(HLOC,VLOC)-(HLOC+6,VLOC+7),HOLDB
- 12480 PUT (HLOC,VLOC),HOLDC,PSET
- 12490 GOTO 12270
- 12500 IF ASC(X$) > 32 THEN GOTO 12550
- 12510 FOR I=HLOC TO HLOC+3*RES:FOR J=VLOC TO VLOC+7
- 12520 PSET (I,J),0
- 12530 NEXT J,I
- 12540 GOTO 12270
- 12550 GET #1,ASC(X$)-32+(2-RES)*93
- 12560 OUTPUT$=BUFFER$
- 12570 FOR J= 0 TO 2
- 12580 HOLDC(J)=CVS(MID$(OUTPUT$,4*J+1,4))
- 12590 NEXT J
- 12600 HLOC=RES*160-3:VLOC=97:START=0
- 12610 GET(HLOC,VLOC)-(HLOC+6,VLOC+7),HOLDB
- 12620 PUT (HLOC,VLOC),HOLDC,PSET
- 12630 GOTO 12270
- 12640 ERASE HOLDC,HOLDB:CLOSE #1:CAPS=1:RETURN
- 12650 ERASE HOLDC,HOLDB:CLOSE #1:CAPS=1:SKIP$="NEW":NOW$="NEW"
- 12660 MSG=0:GOSUB 15920:GOTO 11260
- 12670 REC=503:GOSUB 15490:GOSUB 15220:RETURN
- 12680 REM *************************************************************
- 12690 REM ** F2 SCL = Scale a Drawing Color 0,14 **
- 12700 REM *************************************************************
- 12710 IF RES <> 0 THEN GOTO 12730
- 12720 NOW$="SCL":REC=510:GOSUB 15490:GOSUB 15220:RETURN
- 12730 NOW$="SCL":MSG=0:GOSUB 15920
- 12740 SPEED=0:PRESET (HLOC,VLOC),CLR
- 12750 GOSUB 15220:IF SKIP$="NEW" THEN GOTO 13460
- 12760 IF SKIP$ <> "SCL" THEN RETURN
- 12770 IF TYPE$="G" THEN GOTO 12750
- 12780 IF X$ > "0" AND X$ <= "9" AND HOLD$ <> " " THEN SPEED = 1-(ASC(X$)-48)/25
- 12790 IF X$ = "E" THEN HOLD$ = "E"
- 12800 IF X$ = "C" THEN HOLD$ = "C"
- 12810 IF SPEED = 0 OR HOLD$ = " " THEN GOTO 12750
- 12820 IF HOLD$ = "E" THEN GOTO 13140
- 12830 REM ***** contract - left side *****
- 12840 FOR I = 160*RES TO 0 STEP -1
- 12850 IF SKIP$<>"SCL" THEN RETURN
- 12860 PSET(I,0),1:PSET(I,199),1
- 12870 K=160*RES-(160*RES-I)/SPEED
- 12880 FOR J = 100 TO 1 STEP -1
- 12890 L=100-(100-J)/SPEED
- 12900 IF K >=0 AND L >=0 THEN PSET (I,J),POINT(K,L) ELSE PSET (I,J),0
- 12910 NEXT J
- 12920 FOR J = 101 TO 198
- 12930 L=100+(J-100)/SPEED
- 12940 IF K >=0 AND L <=199 THEN PSET (I,J),POINT(K,L) ELSE PSET (I,J),0
- 12950 NEXT J
- 12960 PSET(I,0),0:PSET(I,199),0
- 12970 NEXT I
- 12980 REM ***** contract - right side *****
- 12990 FOR I = 160*RES + 1 TO 320*RES-1
- 13000 IF SKIP$<>"SCL" THEN RETURN
- 13010 PSET(I,0),1:PSET(I,199),1
- 13020 K=160*RES+(I-160*RES)/SPEED
- 13030 FOR J = 100 TO 1 STEP -1
- 13040 L=100-(100-J)/SPEED
- 13050 IF K <= 320*RES-1 AND L >= 0 THEN PSET(I,J),POINT(K,L) ELSE PSET(I,J),0
- 13060 NEXT J
- 13070 FOR J = 101 TO 198
- 13080 L=100+(J-100)/SPEED
- 13090 IF K <= 320*RES-1 AND L <=199 THEN PSET (I,J),POINT(K,L) ELSE PSET (I,J),0
- 13100 NEXT J
- 13110 PSET(I,0),0:PSET(I,199),0
- 13120 NEXT I
- 13130 SPEED = 0:HOLD$ = " ":MSG=0:GOSUB 15920:GOTO 12750
- 13140 REM ***** expand - left side *****
- 13150 SPEED = 2-SPEED
- 13160 FOR I = 0 TO 160*RES
- 13170 IF SKIP$<>"SCL" THEN RETURN
- 13180 PSET(I,0),1:PSET(I,199),1
- 13190 K=160*RES-((160*RES-I)/SPEED)
- 13200 FOR J = 1 TO 100
- 13210 L=100-((100-J)/SPEED)
- 13220 PSET (I,J),POINT(K,L)
- 13230 NEXT J
- 13240 FOR J = 198 TO 101 STEP -1
- 13250 L=100-((100-J)/SPEED)
- 13260 PSET (I,J),POINT(K,L)
- 13270 NEXT J
- 13280 PSET(I,0),0:PSET(I,199),0
- 13290 NEXT I
- 13300 REM ***** expand - right side *****
- 13310 FOR I = 320*RES-1 TO 160*RES + 1 STEP -1
- 13320 IF SKIP$<>"SCL" THEN RETURN
- 13330 PSET(I,0),1:PSET(I,199),1
- 13340 K = (I-160*RES)/SPEED + 160*RES
- 13350 FOR J = 1 TO 100
- 13360 L=100-(100-J)/SPEED
- 13370 PSET(I,J),POINT(K,L)
- 13380 NEXT J
- 13390 FOR J = 198 TO 101 STEP -1
- 13400 L=(J-100)/SPEED + 100
- 13410 PSET (I,J),POINT(K,L)
- 13420 NEXT J
- 13430 PSET(I,0),0:PSET(I,199),0
- 13440 NEXT I
- 13450 SPEED = 0:HOLD$ = " ":MSG=0:GOSUB 15920:GOTO 12750
- 13460 SKIP$="NEW":NOW$="NEW":MSG=0:GOSUB 15920:GOTO 11260
- 13470 REM *************************************************************
- 13480 REM ** F3 SSP = Store a Sprite **
- 13490 REM *************************************************************
- 13500 IF RES <> 0 THEN GOTO 13520
- 13510 NOW$="SSP":REC=513:GOSUB 15490:GOSUB 15220:RETURN
- 13520 RES1=RES:NOW$="SSP"
- 13530 L=1:R=320*RES1:T=1:B=200:SPEED=1
- 13540 LINE (L,T)-(R,B),1,B
- 13550 PURGE=1:GOSUB 15220:IF SKIP$<>"SSP" THEN RETURN
- 13560 IF TYPE$="G" THEN GOTO 13780
- 13570 IF X$<"1" OR X$>"9" THEN GOTO 13600
- 13580 SPEED = ASC(X$)-48
- 13590 GOTO 13550
- 13600 IF X$<>"G" THEN GOTO 13550
- 13610 R=R-1:L=L+1:T=T+1:B=B-1
- 13620 I=4+INT(((R-L+1)*(3-RES1)+7)/8)*(B-T+1)
- 13630 I=INT((3+I)/4)+1:J=FRE(" ")
- 13640 IF J>((I*4)+500) THEN GOTO 13660
- 13650 MSG=1001:GOSUB 15920:GOTO 13550
- 13660 DIM HOLD(I)
- 13670 GET (L,T)-(R,B),HOLD
- 13680 REC=516:VLOC=6:GOSUB 15340:IF SKIP$<>"SSP" THEN GOTO 13760
- 13690 OPEN Y$+".SPR" FOR OUTPUT AS #1
- 13700 WRITE #1,RES1,PAL,I,R-L+1,B-T+1
- 13710 FOR J= 0 TO I
- 13720 K=VARPTR(HOLD(J))
- 13730 WRITE #1,PEEK(K),PEEK(K+1),PEEK(K+2),PEEK(K+3)
- 13740 NEXT J
- 13750 REC = 520:GOSUB 15490:GOSUB 15220:SKIP$="INS"
- 13760 CLOSE #1:ERASE HOLD
- 13770 RETURN
- 13780 LINE (L,T)-(R,B),0,B
- 13790 IF X$="H" THEN B=B-SPEED
- 13800 IF X$="M" THEN L=L+SPEED
- 13810 IF X$="P" THEN T=T+SPEED
- 13820 IF X$="K" THEN R=R-SPEED
- 13830 IF B<T+2 THEN B=T+2
- 13840 IF L>R-2 THEN L=R-2
- 13850 GOTO 13540
- 13860 RETURN
- 13870 REM *************************************************************
- 13880 REM ** F8 ANI = Test Animation **
- 13890 REM *************************************************************
- 13900 NOW$="ANI":REC=521:VLOC=4:GOSUB 15340:IF SKIP$<>"ANI" THEN RETURN
- 13910 REC=524:Z$=Y$:VLOC=6:GOSUB 15340:IF SKIP$<>"ANI" THEN RETURN
- 13920 OPEN Z$+".RES" FOR INPUT AS #1:GOTO 13930
- 13930 INPUT #1,RES1,BAK,PAL1
- 13940 CLOSE #1
- 13950 OPEN Y$+".SPR" FOR INPUT AS #1:GOTO 13960
- 13960 INPUT #1,RES,PAL,I,WID,HGHT
- 13970 DIM HOLDC(I),HOLDB(I):GOTO 13980
- 13980 FOR J=0 TO I
- 13990 K=VARPTR(HOLDC(J)):INPUT #1,H(0),H(1),H(2),H(3)
- 14000 FOR L=0 TO 3:POKE K+L,H(L):NEXT L
- 14010 NEXT J
- 14020 CLOSE #1
- 14030 HLOC=(320*RES-WID)/2:VLOC=(200-HGHT)/2
- 14040 SCREEN RES
- 14050 IF RES = 1 THEN COLOR BAK,PAL
- 14060 DEF SEG=&HB800
- 14070 BLOAD Z$,0
- 14080 DEF SEG
- 14090 GET (HLOC,VLOC)-(HLOC+WID-1,VLOC+HGHT-1),HOLDB
- 14100 Y$="P":PUT (HLOC,VLOC),HOLDC,PSET
- 14110 PURGE=1:GOSUB 15220: IF SKIP$ <> "ANI" THEN GOTO 14290
- 14120 IF TYPE$ <> "G" THEN GOTO 14240
- 14130 PUT (HLOC,VLOC),HOLDB,PSET
- 14140 IF X$ = "H" AND VLOC > 0 THEN VLOC=VLOC-1
- 14150 IF X$ = "M" AND HLOC < RES*319-WID+1 THEN HLOC=HLOC+1
- 14160 IF X$ = "P" AND VLOC < 200-HGHT THEN VLOC=VLOC+1
- 14170 IF X$ = "K" AND HLOC > 0 THEN HLOC=HLOC-1
- 14180 GET (HLOC,VLOC)-(HLOC+WID-1,VLOC+HGHT-1),HOLDB
- 14190 IF Y$="P" THEN PUT (HLOC,VLOC),HOLDC,PSET
- 14200 IF Y$="A" THEN PUT (HLOC,VLOC),HOLDC,AND
- 14210 IF Y$="O" THEN PUT (HLOC,VLOC),HOLDC,OR
- 14220 IF Y$="X" THEN PUT (HLOC,VLOC),HOLDC,XOR
- 14230 GOTO 14110
- 14240 IF X$="X" THEN Y$="X"
- 14250 IF X$="A" THEN Y$="A"
- 14260 IF X$="O" THEN Y$="O"
- 14270 IF X$="P" THEN Y$="P"
- 14280 GOTO 14110
- 14290 CLOSE #1:ERASE HOLDB:ERASE HOLDC:RETURN
- 14300 REC=525:GOSUB 15490:GOSUB 15220:RETURN
- 14310 REC=528:GOSUB 15490:GOSUB 15220:RETURN
- 14320 REC=531:GOSUB 15490:GOSUB 15220:RETURN
- 14330 REM *************************************************************
- 14340 REM ** F5 RSP = Retrieve a Sprite **
- 14350 REM *************************************************************
- 14360 NOW$="RSP":REC=534:VLOC=4:GOSUB 15340:IF SKIP$<>"RSP" THEN RETURN
- 14370 OPEN Y$+".SPR" FOR INPUT AS #1
- 14380 INPUT #1,RES1,PAL,I,WID,HGHT
- 14390 DIM HOLDC(I)
- 14400 IF RES1 <>1 THEN GOTO 14460
- 14410 REC=537:GOSUB 15490
- 14420 GOSUB 15220:IF SKIP$<>"RSP" THEN GOTO 14580
- 14430 IF TYPE$<>"C" THEN 14420
- 14440 BAK=ASC(X$)-65
- 14450 IF BAK<0 OR BAK >15 THEN GOTO 14420
- 14460 SCREEN RES1:RES=RES1
- 14470 CLS
- 14480 IF RES=1 THEN COLOR BAK,PAL
- 14490 FOR J= 0 TO I
- 14500 K=VARPTR(HOLDC(J)):INPUT #1,H(0),H(1),H(2),H(3)
- 14510 FOR L=0 TO 3:POKE K+L,H(L):NEXT L
- 14520 NEXT J
- 14530 HLOC=(320*RES-WID)/2:VLOC=(200-HGHT)/2
- 14540 PUT (HLOC,VLOC),HOLDC:ERASE HOLDC
- 14550 CLOSE #1
- 14560 SKIP$="NEW":NOW$="NEW"
- 14570 GOTO 11260
- 14580 CLOSE #1:ERASE HOLD:RETURN
- 14590 REC=572:GOSUB 15490:GOSUB 15220:RETURN
- 14600 REC=548:GOSUB 15490:GOSUB 15220:RETURN
- 14610 REM *************************************************************
- 14620 REM ** F6 RSC = Retrieve a Screen **
- 14630 REM *************************************************************
- 14640 NOW$="RSC":REC=551:VLOC=4:GOSUB 15340:IF SKIP$<>"RSC" THEN RETURN
- 14650 OPEN Y$+".RES" FOR INPUT AS #1:INPUT #1,RES,BAK,PAL:CLOSE #1
- 14660 SCREEN RES
- 14670 IF RES=1 THEN COLOR BAK,PAL
- 14680 DEF SEG=&HB800
- 14690 BLOAD Y$,0
- 14700 DEF SEG
- 14710 SKIP$="NEW":NOW$="NEW"
- 14720 GOTO 11260
- 14730 REC=554:GOSUB 15490:GOSUB 15220:RETURN
- 14740 REM *************************************************************
- 14750 REM ** F4 SSC = Store a Screen Color 0,3 **
- 14760 REM *************************************************************
- 14770 IF RES <> 0 THEN GOTO 14790
- 14780 NOW$="SSC":REC=557:GOSUB 15490:GOSUB 15220:RETURN
- 14790 RES1=RES:NOW$="SSC":PRESET (HLOC,VLOC),CLR
- 14800 DEF SEG= &HB800
- 14810 BSAVE DRIVE$+":SCREEN",0,&H4000:DEF SEG
- 14820 REC=560:VLOC=19:GOSUB 15340:IF SKIP$<>"SSC" THEN RETURN
- 14830 IF LEN(Y$) > 2 THEN NAME DRIVE$+":SCREEN.BAS" AS Y$+".BAS":GOTO 14840
- 14840 IF LEN(Y$) = 2 THEN Y$ = DRIVE$+":SCREEN"
- 14850 OPEN Y$+".RES" FOR OUTPUT AS #1
- 14860 WRITE #1,RES1,BAK,PAL
- 14870 CLOSE #1:CLS:REC=569
- 14880 NOW$="INS":SKIP$="INS":GOSUB 15490
- 14890 RETURN
- 14900 REC=571:GOSUB 15490:LOCATE 19,37:PRINT " ":GOTO 14820
- 14910 REC=576:GOSUB 15490:LOCATE 19,37:PRINT " ":RETURN
- 14920 REC=581:GOSUB 15490:LOCATE 19,37:PRINT " ":RETURN
- 14930 REM *************************************************************
- 14940 REM ** Error Handling **
- 14950 REM *************************************************************
- 14960 MSG=ERR:GOSUB 15920
- 14970 IF ERR = 7 AND ERL = 13970 THEN RESUME 14320
- 14980 IF ERR = 7 AND ERL = 14390 THEN RESUME 14600
- 14990 IF (ERR = 24 OR ERR = 25) AND ERL = 15790 THEN RESUME 15850
- 15000 IF ERR = 61 AND ERL = 14810 THEN RESUME 14910
- 15010 IF ERR = 61 AND ERL = 14870 THEN RESUME 14920
- 15020 IF ERR = 68 AND ERL = 15790 THEN RESUME 10400
- 15030 IF (ERR = 53 OR ERR = 52) AND ERL = 10050 THEN RESUME 10340
- 15040 IF (ERR = 53 OR ERR = 52) AND ERL = 12240 THEN RESUME 12670
- 15050 IF (ERR = 53 OR ERR = 52) AND ERL = 13920 THEN RESUME 14300
- 15060 IF (ERR = 53 OR ERR = 52) AND ERL = 13950 THEN RESUME 14310
- 15070 IF (ERR = 53 OR ERR = 52) AND ERL = 14370 THEN RESUME 14590
- 15080 IF (ERR = 53 OR ERR = 52) AND ERL = 14650 THEN RESUME 14730
- 15090 IF ERR = 58 AND ERL = 14830 THEN RESUME 14900
- 15100 IF ERR = 71 AND ERL = 15530 THEN RESUME 15860
- 15110 IF ERR = 72 AND ERL = 15530 THEN RESUME 15910
- 15120 CLS
- 15130 PRINT "Error number ",ERR," at line number ",ERL
- 15140 PRINT
- 15150 PRINT "Please notify: Jan Young"
- 15160 PRINT " 767 N. Holden St."
- 15170 PRINT " Port Washington, Wi. 53074"
- 15180 PRINT
- 15190 PRINT "Please include the error number and line number above and"
- 15200 PRINT "as much information about what you were doing as possible."
- 15210 END
- 15220 REM *************************************************************
- 15230 REM ** Read From Keyboard **
- 15240 REM *************************************************************
- 15250 IF PURGE=0 THEN 15270
- 15260 DEF SEG=&H40:POKE &H1A,PEEK(&H1C):DEF SEG
- 15270 X$=INKEY$:IF SKIP$<>NOW$ THEN PURGE=0:RETURN
- 15280 IF X$="" THEN 15270
- 15290 IF LEN(X$)<>2 THEN 15320
- 15300 X$=MID$(X$,2,1)
- 15310 TYPE$="G":PURGE=0:RETURN
- 15320 IF ASC(X$)>96 AND CAPS=1 THEN X$=CHR$(ASC(X$)-32)
- 15330 TYPE$="C":PURGE=0:RETURN
- 15340 REM *************************************************************
- 15350 REM ** Read 8 Characters From Keyboard **
- 15360 REM *************************************************************
- 15370 Y$=DRIVE$+":":GOSUB 15490
- 15380 FOR J=1 TO 8
- 15390 GOSUB 15220:IF SKIP$<>NOW$ THEN RETURN
- 15400 IF TYPE$<>"C" THEN 15390
- 15410 IF ASC(X$) <> 8 THEN GOTO 15440
- 15420 IF J=1 THEN GOTO 15390
- 15430 J=J-1:X$=" ":LOCATE VLOC,62+J:PRINT X$:Y$=MID$(Y$,1,J+1):GOTO 15390
- 15440 IF ASC(X$) = 13 THEN GOTO 15480
- 15450 IF ASC(X$) = 46 THEN GOTO 15390
- 15460 LOCATE VLOC,62+J:PRINT X$:Y$=Y$+X$
- 15470 NEXT J
- 15480 RETURN
- 15490 REM *************************************************************
- 15500 REM ** Print Verbiage Screens **
- 15510 REM *************************************************************
- 15520 WIDTH 80:SCREEN 0,1:RES=0
- 15530 OPEN "A:VERBIAGE" AS #2 LEN=85
- 15540 FIELD #2,85 AS BUFFER$
- 15550 GET 2,REC:OUTREC$ = BUFFER$
- 15560 IF SKIP$<>NOW$ THEN GOTO 15770
- 15570 IF MID$(OUTREC$,1,3)<>"c01" THEN GOTO 15600
- 15580 COLOR (VAL(MID$(OUTREC$,4,2))),(VAL(MID$(OUTREC$,6,2))),(VAL(MID$(OUTREC$,8,2)))
- 15590 CLS:REC=REC+1:GOTO 15550
- 15600 IF MID$(OUTREC$,1,3)="p01" THEN GOTO 15780
- 15610 LOCATE (VAL(MID$(OUTREC$,4,2))),(VAL(MID$(OUTREC$,6,2))),0
- 15620 IF VAL(MID$(OUTREC$,6,2))>8 THEN PRINT MID$(OUTREC$,8,78-(VAL(MID$(OUTREC$,6,2))))
- 15630 IF VAL(MID$(OUTREC$,6,2))<9 THEN PRINT MID$(OUTREC$,8,70)
- 15640 IF MID$(OUTREC$,82,1) <> " " AND MID$(OUTREC$,82,1) <> "I" THEN GOTO 15680
- 15650 REC = REC +1
- 15660 IF VAL(MID$(OUTREC$,78,4)) <> 0 THEN REC=VAL(MID$(OUTREC$,78,4))
- 15670 GOTO 15550
- 15680 IF MID$(OUTREC$,82,1) <> "P" THEN GOTO 15740
- 15690 LOCATE 23,28,0:PRINT "Press Any Key to Continue"
- 15700 GOSUB 15220:IF SKIP$ <> NOW$ THEN GOTO 15770
- 15710 CLS:REC=REC+1
- 15720 IF VAL(MID$(OUTREC$,78,4)) <> 0 THEN REC=VAL(MID$(OUTREC$,78,4))
- 15730 GOTO 15550
- 15740 IF MID$(OUTREC$,82,1) <> "E" THEN GOTO 15770
- 15750 LOCATE 23,28,0:PRINT "Press Any Key to Continue"
- 15760 GOSUB 15220
- 15770 CLOSE #2:RETURN
- 15780 IF MID$(OUTREC$,4,1) = "1" THEN LPRINT
- 15790 LPRINT USING "& &";MID$(OUTREC$,8,35);MID$(OUTREC$,43,35)
- 15800 IF MID$(OUTREC$,82,1) <> " " AND MID$(OUTREC$,82,1) <> "I" THEN GOTO 15840
- 15810 REC = REC +1
- 15820 IF VAL(MID$(OUTREC$,78,4)) <> 0 THEN REC=VAL(MID$(OUTREC$,78,4))
- 15830 GOTO 15550
- 15840 CLOSE #2:RETURN
- 15850 REC=615:GOSUB 15490:GOSUB 15220:GOTO 15790 ' printer not ready
- 15860 CLS:PRINT "Your disk drive is not ready. Please insert The Designer's"
- 15870 PRINT "disk in Drive A and close the door."
- 15880 PRINT
- 15890 PRINT "Press any key to Continue"
- 15900 GOSUB 15220:GOTO 15530
- 15910 REC=623:GOSUB 15490:GOSUB 15220:GOTO 15530 ' disk i/o error
- 15920 REM *************************************************************
- 15930 REM ** Sound Effects **
- 15940 REM *************************************************************
- 15950 IF MSG = 0 THEN PLAY "t255mso3c8c8c8"
- 15960 IF MSG > 0 THEN PLAY "t255o1c8e-8c8e-8"
- 15970 RETURN
-